#include <gmp.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <time.h>


int main (void){

        //declarações
	mpf_t x,xi,xr,y,yi,z,aux;
	int iteracao;
	FILE *fp; 
//	char nome[20], it[2];
	float desempenho;
    	clock_t start,end;
        char pi[10];
	 	
	//definindo a precisão a ser utilizada
	mpf_set_default_prec(33219281);

        //prepara as variaveis para serem utilizadas
	mpf_init(x);
        mpf_init(xi);
        mpf_init(xr);
        mpf_init(y);
        mpf_init(yi);
        mpf_init(z);
        mpf_init(aux);
	mpf_sqrt_ui(xi,2);
        mpf_add_ui(z,xi,2);
	
	
	//obtem o tempo inicial para o calculo de desempenho
	start = clock();
        
    
        for(iteracao=0; iteracao <= 24; iteracao++){
                
                mpf_set(x,xi);
		mpf_sqrt(xr,x);
                mpf_ui_div(xi,1,xr);
                mpf_add(xi,xr,xi);
                mpf_div_ui(xi,xi,2);
                 
                mpf_set(y,yi);                    
                mpf_add_ui(yi,y,1);
                mpf_mul(yi,xr,yi);
                mpf_add(aux,x,y);
                mpf_div(yi,yi,aux);                   
                mpf_add_ui(aux,xi,1);
                mpf_mul(aux,z,aux);
                mpf_mul(aux,aux,yi);

                mpf_add_ui(z,yi,1);   
                mpf_div(z,aux,z);
      		
		
		//prepara o nome dos arquivos
	//	strcpy(nome,"bs");
	//	sprintf(it,"%d", iteracao);
	//	strcat(nome,it);
	//	strcat(nome,".txt");

//		fp = fopen(nome, "w");
                
//		if(fp == NULL){
  //                  	printf("Erro ao abrir o arquivo!!\n");
    //                	return 1;
      //          }
	// 	mpf_out_str(fp, 10, 0, z);
          //      fclose(fp);
        }
            
        //obtem o tempo após o processamento do algoritmo para o calculo de desempenho
        end = clock();

        //calculo do desempenho
        desempenho =((double)(end-start))/CLOCKS_PER_SEC;

        //cria um log contendo o tempo de execução
        fp = fopen("Tempo_Execucao.txt", "w");
        if(fp != NULL){
        	fprintf(fp,"Sequential Borwein : %.8f seconds.\n",desempenho);
        fclose(fp);    
        }
	else{
        	printf("Erro ao abrir o arquivo!!\n");
            	return 1;
	}
        
        //limpa as variáveis utilizadas
        mpf_clear(x);
        mpf_clear(xi);
        mpf_clear(xr);
        mpf_clear(y);
        mpf_clear(yi);
        mpf_clear(z);
        mpf_clear(aux);

        return 0;
}
